<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function groupPropertiesByType(properties) {
            // 定义一个空对象用于储存结果。
            const result = {};
            // 使用数组的 map 方法对原数组进行映射，将每个元素拆分成一个新的数组，数组的第一个元素是房产名称，第三个元素是房产类型。
            properties.map(property => property.split(","))
                // 使用数组的 reduce 方法，将每个房产按照类型进行分组，将房产名称放入对应类型的数组中。
                .reduce((accumulator, [name, location, type]) => {
                    if (accumulator[type]) {
                        // 如果已经有该类型的房产数组，将当前房产名称加入该数组。
                        accumulator[type].push(name);
                    } else {
                        // 如果没有该类型的房产数组，新建一个数组，将当前房产名称作为第一个元素。
                        accumulator[type] = [name];
                    }
                    // 返回累加器对象。
                    return accumulator;
                }, result);
            // 使用对象的 keys 方法获取所有的房产类型，作为新对象的属性名。
            return result;
        }

        const properties = [
            "中华园,北京市,公寓",
            "华景苑,上海市,别墅",
            "新城市广场,深圳市,公寓",
            "雅居乐花园,广州市,别墅",
            "恒大城,广州市,公寓",
            "太阳花园,北京市,别墅"
        ];
        // 调用函数并输出结果。
        console.log(groupPropertiesByType(properties)); // 输出：{"公寓":["中华园","新城市广场","恒大城"],"别墅":["华景苑","雅居乐花园","太阳花园"]}
    </script>
</body>

</html>